package com.rgc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
 





import com.rgc.domain.Agrupacion;
import com.rgc.domain.Publicacion;
import com.rgc.domain.Usuario;
import com.rgc.domain.form.Propaganda;

public  class PublicacionDaoImpl extends JdbcDaoSupport implements PublicacionDao {

	public boolean addNoticia(final Publicacion publicacion,final Usuario usuario) {
		try {
			KeyHolder keyHolder = new GeneratedKeyHolder(); 
			final String sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(
					new PreparedStatementCreator()
			        {
			            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
			            {
			                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			                preparedStatement.setString(1,usuario.getIdusuario());
			                preparedStatement.setString(2,"1" );
			                preparedStatement.setString(3, publicacion.getCuerpo());
			                preparedStatement.setString(4, publicacion.getTitulo());
			                preparedStatement.setString(5, publicacion.getUrlimagen());
	
			                return preparedStatement;
			            }
			        }	,keyHolder);			
		    	int idpublicacion = keyHolder.getKey().intValue(); 
                if(idpublicacion>0)
                	return true;
         
        } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
        }
		return false;
	}
	
	
	public boolean editNoticia(final Publicacion publicacion) {
		try {
			
			final String sql = "UPDATE publicacion set cuerpo=?,titulo=?,urlimagen=? where idpublicacion=?";
			getJdbcTemplate().update(
					new PreparedStatementCreator()
			        {
			            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
			            {
			                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			                preparedStatement.setString(1,publicacion.getCuerpo());
			                preparedStatement.setString(2,publicacion.getTitulo() );
			                preparedStatement.setString(3,publicacion.getUrlimagen());
			                preparedStatement.setString(4,publicacion.getIdpublicacion());
			                return preparedStatement;
			            }
			        }	);			
		    	
                
                return true;
         
        } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
        }
		return false;
	}

	public List<Publicacion> listPublicacion() {
		
		
		return null;
	} 

	public List<Publicacion> listPublicacion(String[] campo, String[] valor,String limite) {
		return  listPublicacion(campo,valor,null,null,limite);
	}
	
	public List<Publicacion> listPublicacion(String[] campo, String[] valor, String[] Signo,String[] conectorEntrada,String limite) {
		try {
			if(limite!=null)
				limite=" LIMIT 0,"+limite+" ";
			else
				limite="";
			
			
			
			
			String sql = " SELECT a.*,b.nombre as publicacion_tipo_nombre,c.username FROM publicacion a,publicacion_tipo b,usuario c  ";
			String conector=" where ";
			for (int i=0;i<campo.length;i++)  {
				 String signo1=" ='";
				 String signo2="' ";
				 if(Signo!=null){
					 if(Signo[i].equals("LIKE")){
						 signo1=" LIKE '%";
						 signo2="%' ";
					 }
				 }
				 System.out.println("[["+i+"]]");
				 sql+=conector+""+campo[i]+signo1+valor[i]+signo2;
				 if(conectorEntrada==null)
					 conector=" and ";
				 else
					 conector=" "+conectorEntrada[i]+" ";
				
						 
		    }
			sql+=conector+"  a.estado=1 and a.idpublicacion_tipo=b.idpublicacion_tipo  and c.idusuario=a.idusuario "+" order by a.idpublicacion desc "+limite;
			System.out.println(sql);
			List<Publicacion> publicacionFound =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Publicacion>(Publicacion.class));
         

        	return publicacionFound;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<Publicacion>();
	}
	
	public List<Publicacion> listNoticias(String parametro) {
		List<Publicacion> publicacion=null;
		if(parametro==null)
			publicacion=listPublicacion(new String[]{"a.idpublicacion_tipo"}, new String[]{"1"},"10");
		else
			publicacion=listPublicacion(new String[]{"a.idpublicacion_tipo","titulo"}, new String[]{"1",parametro}, new String[]{"=","LIKE"},null,null);
			;
		return publicacion;
	}

	public Publicacion findNoticia(String idpublicacion) {
		
		List<Publicacion> publicacion=listPublicacion(new String[]{"a.idpublicacion_tipo","a.idpublicacion"}, new String[]{"1",idpublicacion},null);
		if(publicacion.size()==1)
			return publicacion.get(0);
		return null;
	}


	public List<Publicacion> listNoticiasEventos() {
		
		List<Publicacion> publicacion=null;
		publicacion=listPublicacion(new String[]{"(a.idpublicacion_tipo","a.idpublicacion_tipo"}, new String[]{"1","2"},null,new String[]{"or",")and"},"4");
		return publicacion;
		
	}


	public List<Publicacion> listPropaganda() {
		List<Publicacion> publicacionList=listPublicacion(new String[]{"a.idpublicacion_tipo","a.urlImagen"}, new String[]{"4","SPONSORDEFAULT"},null);
		
		List<Publicacion> publicacion=new ArrayList<Publicacion>();
		publicacion.add(new Publicacion());
		publicacion.add(new Publicacion());
		publicacion.add(new Publicacion());
		publicacion.add(new Publicacion());
		publicacion.add(new Publicacion());
		
		for ( Publicacion pub : publicacionList){
			if(pub.getTitulo().equals("SPONSOR0")){
				publicacion.remove(0);
				publicacion.add(0,pub);
			}
			if(pub.getTitulo().equals("SPONSOR1")){
				publicacion.remove(1);
				publicacion.add(1,pub);
			}
			if(pub.getTitulo().equals("SPONSOR2")){
				publicacion.remove(2);
				publicacion.add(2,pub);
			}
			if(pub.getTitulo().equals("SPONSOR3")){
				publicacion.remove(3);
				publicacion.add(3,pub);
			}
			if(pub.getTitulo().equals("SPONSOR4")){
				publicacion.remove(4);
				publicacion.add(4,pub);
			}
			
		}	
		return publicacion;
	}


	public boolean addPropaganda(Propaganda propaganda,final Usuario usuario) {
		// TODO Auto-generated method stub
		
		
	    String sql =null;
		try {
			sql = "UPDATE publicacion set estado=0 where idpublicacion_tipo=4 and urlimagen='SPONSORDEFAULT'";
			getJdbcTemplate().update(sql);
			

			sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							usuario.getIdusuario(),
							"4",
							propaganda.getPublicidad().get(0).getCuerpo(),
							"SPONSOR0",
							"SPONSORDEFAULT"
							});			
		    
			
			sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							usuario.getIdusuario(),
							"4",
							propaganda.getPublicidad().get(1).getCuerpo(),
							"SPONSOR1",
							"SPONSORDEFAULT"
							});	
			
			sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							usuario.getIdusuario(),
							"4",
							propaganda.getPublicidad().get(2).getCuerpo(),
							"SPONSOR2",
							"SPONSORDEFAULT"
							});	
			
			sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							usuario.getIdusuario(),
							"4",
							propaganda.getPublicidad().get(3).getCuerpo(),
							"SPONSOR3",
							"SPONSORDEFAULT"
							});	
			
			sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							usuario.getIdusuario(),
							"4",
							propaganda.getPublicidad().get(4).getCuerpo(),
							"SPONSOR4",
							"SPONSORDEFAULT"
							});	
                
            return true;
         
        } catch (Exception e) {
                System.out.println(e.getMessage());
                e.printStackTrace();
        }
		return false;

	}

	public Publicacion listEventoPublicacion(String idevento ) {	
		List<Publicacion> publicacion=null;
		publicacion=listPublicacion(new String[]{"a.idpublicacion_tipo","a.idevento"}, new String[]{"2",idevento},"10");
		if(publicacion.size()>0)
			return publicacion.get(0);
		return null;
		
	}


	public boolean addSponsor(Usuario usuario) {
		
		try{
		String sql = "DELETE FROM publicacion where idusuario='"+usuario.getIdusuario()+"' and idpublicacion_tipo=4 and titulo='SPONSOR_CUSTOM' ";
		getJdbcTemplate().update(sql);
		
		sql = "INSERT INTO publicacion(idusuario,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
		getJdbcTemplate().update(sql,new Object[]{
						usuario.getIdusuario(),
						"4",
						usuario.getSponsor(),
						"SPONSOR_CUSTOM",
						"SPONSOR_CUSTOM"
						});		
		return true;
		
	}catch(Exception e){e.printStackTrace();}
	return false;
	
	}


	public boolean addSponsor(Agrupacion staff) {
		try{
			String sql = "DELETE FROM publicacion where idagrupacion='"+staff.getIdgrupo()+"' and idpublicacion_tipo=4 and titulo='SPONSOR_CUSTOM' ";
			getJdbcTemplate().update(sql);
			
			sql = "INSERT INTO publicacion(idagrupacion,idpublicacion_tipo,cuerpo,titulo,urlimagen) values(?,?,?,?,?)";
			getJdbcTemplate().update(sql,new Object[]{
							staff.getIdgrupo(),
							"4",
							staff.getSponsor(),
							"SPONSOR_CUSTOM",
							"SPONSOR_CUSTOM"
							});		
			return true;
			
		}catch(Exception e){e.printStackTrace();}
		return false;
	}


	public Publicacion getSponsor(Usuario usuario) {
		List<Publicacion> publicacionList=listPublicacion(new String[]{"a.idpublicacion_tipo","a.urlImagen","a.idusuario"}, new String[]{"4","SPONSOR_CUSTOM",usuario.getIdusuario()},null);
		if(publicacionList.size()>0)
			return publicacionList.get(0);
		return null;
	}


	public Publicacion getSponsor(Agrupacion staff) {
		try {
			
			
			String sql = "   "+
					" SELECT a.*,b.nombre as publicacion_tipo_nombre,c.nombre "+
					" FROM publicacion a,publicacion_tipo b,grupo c  "  +
					" where a.idpublicacion_tipo ='4'  and a.urlImagen ='SPONSOR_CUSTOM'  " +
					" and a.idagrupacion ='"+staff.getIdgrupo()+"'  and   a.estado=1  "+
					" and a.idpublicacion_tipo=b.idpublicacion_tipo   "+
					" and c.idgrupo=a.idagrupacion  order by a.idpublicacion desc  ";
			
			System.out.println(sql);
			List<Publicacion> publicacionFound =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Publicacion>(Publicacion.class));
			
			if(publicacionFound.size()>0)
				return publicacionFound.get(0);

		}catch(Exception e){e.printStackTrace();}
		
		
		return null;
	}

	
}
